1.1 DataFrame是什么
- DataFrame是一種以RDD為基礎(chǔ)的分布式數(shù)據(jù)集,類似于傳統(tǒng)數(shù)據(jù)庫中的二維表格。
1.2 DataFrame和RDD的區(qū)別
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-0PH9hGCO-1655396298057)(assets/1653400255144.png)]
-
上圖直觀地體現(xiàn)了DataFrame和RDD的區(qū)別。
-
DataFrame是基于RDD之上的分布式數(shù)據(jù)集,給予Schema信息。
- 左邊:RDD -> 數(shù)據(jù)外在類型:Person(CaseClass),內(nèi)部結(jié)構(gòu)不知道
- 右邊:DataFrame -> 數(shù)據(jù)內(nèi)部結(jié)構(gòu),全部知道,包含字段名稱和字段類型,但是不知道外部類型,Row類型(弱類型)
DataFrame = RDD[Row] + Schema
1.2 RDD與DataFrame性能
- Spark SQL性能上比RDD要高。因為Spark SQL了解數(shù)據(jù)內(nèi)部結(jié)構(gòu),從而對藏于DataFrame背后的數(shù)據(jù)源以及作用于DataFrame之上的變換進行了針對性的優(yōu)化,最終達到大幅提升運行時效率的目標。反觀RDD,由于無從得知所存數(shù)據(jù)元素的具體內(nèi)部結(jié)構(gòu),Spark Core只能在Stage層面進行簡單、通用的流水線優(yōu)化。